package LeetCodeHot100TopInterview;

import java.util.LinkedList;
import java.util.List;

public class Q448_MissingNumPlus {

    //之前类似的题是确实的一个数字
    //本题可以用之前的解法解，但是操作上有点区别 ==> 比对时候发现重复不返回 false
    //此算法的核心思想是物归原主 ==> 最后完美的情况下 下标与值唯一映射
    public List<Integer> findDisappearedNumbers(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            while (nums[i] != i + 1){
                if (!swap(nums, i, nums[i] - 1)){
                    break;
                }
            }
        }
        List<Integer> ans = new LinkedList<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != i + 1){
                ans.add(i + 1);
            }
        }
        return ans;
    }

    public boolean swap(int[] nums, int x, int y){
        if (nums[x] == nums[y]){
            return false;
        }
        int tmp = nums[x];
        nums[x] = nums[y];
        nums[y] = tmp;
        return true;
    }


}
